2024 Canadian Grand Prix¶
Bonjour les gestionnaires and welcome to the Fantasy League report for the 2024 Canadian Grand Prix. Historically one of the most exciting circuits on the Grand Prix calendar, Canada has thrown up some absolute bangers in the past. The one that springs to mind, at least in the modern era of formula 1 is the 2011 Canadian Grand Prix that was interrupted by the weather that caused absolute chaos, won eventually by Jenson Button, who was at some stage dead last and had multiple incidents throughout the race, only taking the lead on the last lap as Sebastian Vettel lost it on the last lap. Another is the famous Vettel-Hamilton moment during the 2019 Canadian Grand Prix where Vettel again made a mistake whilst leading the race and ran over the grass into turn 3/4 and rejoined leaving just enough room for a car. The stewards deemed this an unsafe rejoin and handed the 4-time champion a 5-second penalty. This handed the win to Hamilton, but those famous images of Sebastian moving the number 1 board to where his car should have been will forever live in my memory. Anyway, let's get into the race report.
The big news on the block this week was the sudden departure of Alpine's Esteban Ocon. The Frenchman supposedly agreed to part ways with the French outfit at the end of the 2024 season, having also signed a new contract elsewhere on the grid (his words not the team's). It's oddly suspicious after the comments made in Monaco by Famin, who said "there will be consequences". It's unusual for a team to announce the departure of a driver, it's usually the other way around. Whether Esteban was already thinking of leaving, or if he really has found another drive, it's oddly coincidental that it would be announced this week. If he has truly found another drive, where could it be? As far as we know, there are no seats in teams further up the grid, so it would have to be a Kick Sauber to partner Hulkenberg, or a Haas to partner Magnussen or Bearman, or at the Williams team to partner Albon. We await the news I'm sure.
Speaking of that Williams seat, rumours have been circling that Carlos Sainz is the target for James Vowles, who has seemingly done a complete U-turn on giving Sargeant a chance. Yes the American driver has had some disaster races recently, but it seems that finally the last chance has been given and they are now openly targeting Carlos. If that's the case, then we still need to fill the seats at Alpine, Mercedes, Kick Sauber, and Haas going forward, with it highly likely that Liam Lawson will be in the RB seat alongside Yuki Tsunoda. The Japanese star resigned for another year earlier in the week too, just after it was announced that Sergio Perez has extended his tenure at Red Bull Racing with a 1 + 1 contract with exit clauses. The 2025 grid is beginning to take shape and so far there are no new faces appearing, but hopefully we get some rookies in next year to make things exciting again.
import os
import subprocess
import src.dataIO as io
import src.webDataIO as wio
from pathlib import Path
year = 2024
race = 'Canada'
Grand Prix Report¶
Free practice was dominated by the weather, with much of the running curtailed due to tyre usage limitations. Many of the teams expecting a wet race, and thus didn't want to run too much in the wet weather in practice and burn through their tyres. Lando Norris, Fernando Alonso, and Lewis Hamilton topped free practice, with not a Red Bull or Ferrari in sight. In fact, Ferrari had an absolute shocker of a weekend, coming down from the success at Monaco pretty hard. Don't worry, I'm going to get into it in this report. Keep in mind that Lewis topped final practice, because there's some good conspiracy theory stories coming in the next few paragraphs.
Sprint Qualifying¶
No Sprint Qualifying To Report.
#wio.outputs_sq_data(
# year=year,
# race=race)
Sprint Race¶
No Sprint Race To Report.
#wio.outputs_sprint_data(
# year=year,
# race=race)
Qualifying Report¶
The weather held off for qualifying, with all of the running taking place in perfect Canadian sunshine. The biggest shock exit in Q1 was of course, Nico Hulkenberg, who has qualified well all season long in that Haas. Qualifying has become such a strong point for the American team that it almost seems a shock when they make an early exit. Nico was just not on it and couldn't get a good lap together, and honestly I think it ruined his weekend because they really could have made something of themselves this week. He was joined by both Kick Sauber drivers, no surprise there as Guanyu Zhou is the only driver to not make it out of Q1 all season long, and the Kick doesn't look like much of a car still even at this point in the season. Esteban Ocon, carrying a 5-place grid penalty from his antics at Monaco, only managed eighteenth and started last anyway. Oh and Sergio Perez also failed to make it into Q2, which isn't even surprising anymore. The Mexican driver has just fallen off a cliff lately and isn't able to get anything out of that monster machinery. You really have to start asking, why are Red Bull continuing to put their faith in him?
Qualifying two, for me at least, is where the pain begins. That's right, we're Ferrari bashing. Charles Leclerc and Carlos Sainz could only manage P11 and P12, falling so hard after succeeding so much in Monaco. The Ferrari didn't have the best of pace all weekend anyway, but both of them were out in the dying minuted of qualifying on used tyres. It was certainly an odd choice from the Italian outfit, and one that not even Charles could deal with. In the media pen after qualifying, he can be seen being shown what to say by the Ferrari media team and then quickly saying "no" and saying something along the lines of "I will be honest". The frustration was clear, and it really didn't help either of their weekends, but it was going to get much much worse. They were joined by Kevin Magnussen and Pierre Gasly, and a super performance by Logan Sargeant who managed to get through to a very rare Q2 appearance.
With all that settled, it was time for the final part of qualifying, and it looked to be between Lewis Hamilton, Max Verstappen, and Lando Norris for that pole position. Lewis had been quick all qualifying but could only manage seventh place. And here is where the conspiracy theory begins, because Lewis was 3-tenths slower than his Q2 lap in the final part of qualifying, after the track had ramped to its peak performance all weekend. Lewis was furious after qualifying and seemed to blame the team for some "weird things" that meant he was significantly slower than George. Well it didn't take long for TeamLH to start doing some digging and found out that Lewis' tyres were at a lower-than-optimal temperature as he left the garage, and that perhaps they were turning down the ERS deployment, and a whole host of other things. Honestly, I think Lewis just made a mistake and wasn't as fast as he was in Q2. Out of nowhere, however, Mercedes teammate George Russel popped it on pole with a 1:12:000, only to be joined on the last of his laps by reigning champion Max Verstappen with exactly the same time. I believe this is only the second time in history that this has ever happened. The pair were joined at the front by the McLaren duo and Daniel Ricciardo, who caught some hate from a former champion earlier in the weekend who questioned why the Australian driver was still in the sport, perhaps he should catch some hate more often because it really worked out for him.
wio.outputs_qualifying_data(
year=year,
race=race)
| Pos | No | Driver | Car | Q1 | Q2 | Q3 | Laps |
|---|---|---|---|---|---|---|---|
| 1 | 63 | George Russell RUS | Mercedes | 1:13.013 | 1:11.742 | 1:12.000 | 26 |
| 2 | 1 | Max Verstappen VER | Red Bull Racing Honda RBPT | 1:12.360 | 1:12.549 | 1:12.000 | 27 |
| 3 | 4 | Lando Norris NOR | McLaren Mercedes | 1:12.959 | 1:12.201 | 1:12.021 | 25 |
| 4 | 81 | Oscar Piastri PIA | McLaren Mercedes | 1:12.907 | 1:12.462 | 1:12.103 | 29 |
| 5 | 3 | Daniel Ricciardo RIC | RB Honda RBPT | 1:13.240 | 1:12.572 | 1:12.178 | 25 |
| 6 | 14 | Fernando Alonso ALO | Aston Martin Aramco Mercedes | 1:13.117 | 1:12.635 | 1:12.228 | 23 |
| 7 | 44 | Lewis Hamilton HAM | Mercedes | 1:12.851 | 1:11.979 | 1:12.280 | 26 |
| 8 | 22 | Yuki Tsunoda TSU | RB Honda RBPT | 1:12.748 | 1:12.303 | 1:12.414 | 24 |
| 9 | 18 | Lance Stroll STR | Aston Martin Aramco Mercedes | 1:13.088 | 1:12.659 | 1:12.701 | 25 |
| 10 | 23 | Alexander Albon ALB | Williams Mercedes | 1:12.896 | 1:12.485 | 1:12.796 | 26 |
| 11 | 16 | Charles Leclerc LEC | Ferrari | 1:13.107 | 1:12.691 | 21 | |
| 12 | 55 | Carlos Sainz SAI | Ferrari | 1:13.038 | 1:12.728 | 22 | |
| 13 | 2 | Logan Sargeant SAR | Williams Mercedes | 1:13.063 | 1:12.736 | 22 | |
| 14 | 20 | Kevin Magnussen MAG | Haas Ferrari | 1:13.217 | 1:12.916 | 16 | |
| 15 | 10 | Pierre Gasly GAS | Alpine Renault | 1:13.289 | 1:12.940 | 18 | |
| 16 | 11 | Sergio Perez PER | Red Bull Racing Honda RBPT | 1:13.326 | 11 | ||
| 17 | 77 | Valtteri Bottas BOT | Kick Sauber Ferrari | 1:13.366 | 10 | ||
| 18 | 31 | Esteban Ocon OCO | Alpine Renault | 1:13.435 | 11 | ||
| 19 | 27 | Nico Hulkenberg HUL | Haas Ferrari | 1:13.978 | 10 | ||
| 20 | 24 | Zhou Guanyu ZHO | Kick Sauber Ferrari | 1:14.292 | 11 |
Race Report¶
The race itself started in a weird wet condition where it was just about the crossover between the wet tyres and the intermediate tyres. That meant that we had most of the field starting on the intermediate tyre getting away and up to speed slowly, but we then had the two Haas drivers on wets storming through the field in the early stages. It looked, for a while, like Kevin Magnussen could actually lead the race, but sadly just as he arrived on the scene of the top 3, the track changed back to intermediates and he was forced to box for a change of tyres. George Russell held on to the lead for the first part of the race, holding back a charging Verstappen and Norris behind. Lando held on to his tyres the best out of those three and as the track began to dry, the McLaren came alive. Lando quickly dispatched of the reigning champion and launched an attack on Russell just as he was about to pit. An early safety car caused by Sargeant spinning in the first sector put the Brit at a disadvantage, but once again he was able to look after his tyres the best and launched an attack on Verstappen and Russell ahead. He tried to pull off a massive over-cut in the transition from wet to dry, which unfortunately didn't pan out. From there, Verstappen just stretched his legs and pulled away.
Sergio Perez had a bit of a disaster race. After making contact with Pierre Gasly on the opening lap, the Mexican driver's day went from bad to worse as he span in the drying conditions and lost his rear wing. The team were heard over the radio asking him to bring the car back as they didn't want a safety car, which they were later fined for. Sergio himself was handed a grid penalty for the next race for driving in an unsafe condition. After signing that contract for an extension at the reigning champions, Sergio really needs to start acting like he's driving for a championship winning team and putting in the performances we expect. He wasn't the only driver to have an absolute shocker this weekend though. After the highs of Monaco, both Ferrari drivers struggled all weekend long. Charles Leclerc reported an engine issue, boxed for dries too early, reset the engine and ended up retiring the car because of the gap between himself and the rest of the field. Carlos Sainz span in much the same way as Perez and was collected by Alex Albon, his rumoured future teammate.
The fight at the end was between McLaren and Mercedes, surprisingly. With both Russell, Norris, and Hamilton fighting over that last step on the podium. Things got pretty intense when Russell attempted an overtake and fell behind his teammate, leading to a very tense team radio in the dying stages as George was told he was allowed to race the seven-time champion. Lewis later reported that it was his worst race ever, which is just him being over-dramatic. Norris managed to bring it home in second, with George in third. Lewis made it to fourth ahead of Oscar Piastri, who just didn't seem like he was on the pace of his teammate ahead. They were followed by the only man who seemed to enjoy the race, Fernando Alonso. He was very animated about how good the race was in the interview pen afterwards.
A couple of standout performances from Daniel Ricciardo, who kept it all together in the race unlike his teammate Yuki Tsunoda, who gave us one of the closest non-incidents I've ever seen with Nico Hulkenberg as he span in the dying stages of the race. Yuki really needs to show that level-headed consistency of a top team driver if he ever wants to be considered for that Red Bull promotion. Lance Stroll similarly had a good race as he pulled off another one of those quiet but progressive races to finish inside the points just behind his teammate. Guanyu Zhou was the only driver to finish a lap down, even after two safety car periods. The Chinese driver has just not been on form of late and isn't showing that he is the driver Audi should put their backing into for the future. If he wants to be taken seriously, he needs to start beating Bottas, who is very much in his Raikkonen phase at the minute.
wio.outputs_race_result(
year=year,
race=race)
| Pos | No | Driver | Car | Laps | Time/Retired | PTS |
|---|---|---|---|---|---|---|
| 1 | 1 | Max Verstappen VER | Red Bull Racing Honda RBPT | 70 | 1:45:47.927 | 25 |
| 2 | 4 | Lando Norris NOR | McLaren Mercedes | 70 | +3.879s | 18 |
| 3 | 63 | George Russell RUS | Mercedes | 70 | +4.317s | 15 |
| 4 | 44 | Lewis Hamilton HAM | Mercedes | 70 | +4.915s | 13 |
| 5 | 81 | Oscar Piastri PIA | McLaren Mercedes | 70 | +10.199s | 10 |
| 6 | 14 | Fernando Alonso ALO | Aston Martin Aramco Mercedes | 70 | +17.510s | 8 |
| 7 | 18 | Lance Stroll STR | Aston Martin Aramco Mercedes | 70 | +23.625s | 6 |
| 8 | 3 | Daniel Ricciardo RIC | RB Honda RBPT | 70 | +28.672s | 4 |
| 9 | 10 | Pierre Gasly GAS | Alpine Renault | 70 | +30.021s | 2 |
| 10 | 31 | Esteban Ocon OCO | Alpine Renault | 70 | +30.313s | 1 |
| 11 | 27 | Nico Hulkenberg HUL | Haas Ferrari | 70 | +30.824s | 0 |
| 12 | 20 | Kevin Magnussen MAG | Haas Ferrari | 70 | +31.253s | 0 |
| 13 | 77 | Valtteri Bottas BOT | Kick Sauber Ferrari | 70 | +40.487s | 0 |
| 14 | 22 | Yuki Tsunoda TSU | RB Honda RBPT | 70 | +52.694s | 0 |
| 15 | 24 | Zhou Guanyu ZHO | Kick Sauber Ferrari | 69 | +1 lap | 0 |
| NC | 55 | Carlos Sainz SAI | Ferrari | 52 | DNF | 0 |
| NC | 23 | Alexander Albon ALB | Williams Mercedes | 52 | DNF | 0 |
| NC | 11 | Sergio Perez PER | Red Bull Racing Honda RBPT | 51 | DNF | 0 |
| NC | 16 | Charles Leclerc LEC | Ferrari | 40 | DNF | 0 |
| NC | 2 | Logan Sargeant SAR | Williams Mercedes | 23 | DNF | 0 |
Fastest Lap¶
Fastest lap this week goes to Lewis Hamilton, who took the fastest lap of the race (a time of 1:14:856) on lap 70 whilst chasing down Russell and Norris ahead. Lewis securing back-to-back fastest laps within a few tenths of each other at different tracks is quite impressive, even though it was his worst race ever.
wio.outputs_fastest_lap(
year=year,
race=race)
| Pos | No | Driver | Car | Lap | Time of day | Time | Avg Speed |
|---|---|---|---|---|---|---|---|
| 1 | 44 | Lewis Hamilton HAM | Mercedes | 70 | 15:49:04 | 1:14.856 | 209.730 |
| 2 | 63 | George Russell RUS | Mercedes | 70 | 15:49:03 | 1:14.895 | 209.621 |
| 3 | 4 | Lando Norris NOR | McLaren Mercedes | 67 | 15:45:15 | 1:15.558 | 207.782 |
| 4 | 1 | Max Verstappen VER | Red Bull Racing Honda RBPT | 70 | 15:48:59 | 1:15.569 | 207.751 |
| 5 | 81 | Oscar Piastri PIA | McLaren Mercedes | 65 | 15:42:46 | 1:16.247 | 205.904 |
| 6 | 14 | Fernando Alonso ALO | Aston Martin Aramco Mercedes | 70 | 15:49:16 | 1:16.303 | 205.753 |
| 7 | 20 | Kevin Magnussen MAG | Haas Ferrari | 68 | 15:46:56 | 1:16.499 | 205.226 |
| 8 | 27 | Nico Hulkenberg HUL | Haas Ferrari | 67 | 15:45:39 | 1:16.683 | 204.733 |
| 9 | 18 | Lance Stroll STR | Aston Martin Aramco Mercedes | 70 | 15:49:23 | 1:16.762 | 204.523 |
| 10 | 31 | Esteban Ocon OCO | Alpine Renault | 70 | 15:49:29 | 1:17.012 | 203.859 |
| 11 | 10 | Pierre Gasly GAS | Alpine Renault | 70 | 15:49:29 | 1:17.013 | 203.856 |
| 12 | 3 | Daniel Ricciardo RIC | RB Honda RBPT | 68 | 15:46:53 | 1:17.076 | 203.689 |
| 13 | 77 | Valtteri Bottas BOT | Kick Sauber Ferrari | 65 | 15:43:03 | 1:17.250 | 203.231 |
| 14 | 22 | Yuki Tsunoda TSU | RB Honda RBPT | 70 | 15:49:52 | 1:17.309 | 203.075 |
| 15 | 24 | Zhou Guanyu ZHO | Kick Sauber Ferrari | 68 | 15:48:35 | 1:17.325 | 203.033 |
| 16 | 11 | Sergio Perez PER | Red Bull Racing Honda RBPT | 51 | 15:21:42 | 1:18.819 | 199.185 |
| 17 | 55 | Carlos Sainz SAI | Ferrari | 51 | 15:21:38 | 1:18.957 | 198.837 |
| 18 | 23 | Alexander Albon ALB | Williams Mercedes | 51 | 15:21:38 | 1:19.359 | 197.830 |
| 19 | 16 | Charles Leclerc LEC | Ferrari | 39 | 15:05:48 | 1:26.012 | 182.528 |
| 20 | 2 | Logan Sargeant SAR | Williams Mercedes | 19 | 14:33:21 | 1:26.484 | 181.531 |
Fantasy League Scores¶
Lineup Scores¶
Ok I think I have waffled enough, let's see what this race has done to the fantasy league standings. First let's begin with the driver/team points for the grid. The data you see below are the current total points and values for each driver and team. Values are taken going into the race and updated for next race after I submit the report.
weekly_scores = {
"Name": ["Points", "Value"],
"Race": [f'{race}'],
"Ocon": [41, 9.2],
"Gasly": [41, 8.1],
"Stroll": [38, 13.2],
"Alonso": [91, 16.4],
"Leclerc": [248, 23.6],
"Sainz": [190, 21.6],
"Bearman": ["N/A", "N/A"],
"Magnussen": [43, 8.9],
"Hulkenberg": [34, 7.8],
"Bottas": [19, 7.5],
"Guanyu": [42, 7.4],
"Norris": [223, 25.6],
"Piastri": [166, 21.3],
"Hamilton": [122, 19.4],
"Russell": [148, 20.5],
"Tsunoda": [47, 9.8],
"Ricciardo": [8, 9.1],
"Verstappen": [301, 30.5],
"Perez": [161, 22.9],
"Albon": [-16, 8.3],
"Sargeant": [0, 5.8],
"Alpine": [97, 8.6],
"Aston Martin": [184, 15.2],
"Ferrari": [538, 23.1],
"Haas": [103, 9.0],
"Kick Sauber": [65, 6.8],
"McLaren": [445, 25.5],
"Mercedes": [365, 21.6],
"RB": [104, 9.3],
"Red Bull": [624, 28.8],
"Williams": [1, 6.5]}
root = Path().absolute()
if Path(f'{root}/Data/{year}/Lineup/{race}_Results.json').is_file():
pass
else:
io.save_json_dicts(
out_path=Path(f'{root}/Data/{year}/Lineup_Weekly.json'),
dictionary=weekly_scores)
subprocess.run(["python", "lineup.py", f'{year}'])
CompletedProcess(args=['python', 'lineup.py', '2024'], returncode=0)
Lando Norris is the highest scorer this week, taking a mega 40 points ahead of Verstappen in second with 37. Unsurprising that those two are the top scorers given their finishing positions but I think Lando was helped by more places gained during the race. The two Mercedes boys are next with Hamilton outscoring Russell 32 to 27 on his worst race ever. He does have a point as George is winning 8-1 in qualifying and 7-2 in the race, but he's outscoring him in the fantasy league. Nico Hulkenberg rounds out the top five with 19 points. Logan Sargeant assumes his place back at the bottom of the weekly scores with -19 points, closely followed by Sergio Perez with -17 after that poor qualifying and a DNF. They're followed by the Ferrari boys who bring home -16 points each and Alex Albon with -12 points. Yuki Tsunoda rounds out the bottom five with 0 points scored this weekend.
Mercedes are on the top step this weekend with their new upgrades bringing some good results, the former champs bring home 74 points ahead of McLaren in second with 57 points. Aston Martin round out the top three with 38 points. Williams are at the bottom this week, only managing -26 points. Ferrari make the bottom three this week, next, with -16 points, and Kick Sauber round out the bottom three with 13 points.
Max Verstappen assumes his position back at the top of the table with 301 points ahead of Charles Leclerc in second with 248 points. Lando is slowly reeling them back in in third place with 223 points, ahead of Carlos Sainz in fourth with 190 points. Oscar Piastri makes it into the top five ahead of Perez with 166 points. Alex Albon remains in the negative at the bottom of the table with -16 points, and he's joined by teammate Logan Sargeant with a huge 0 points in second. Daniel Ricciardo is next up with 8 points, just behind Bottas with 19 points. Nico Hulkenberg rounds out the bottom five with 34 points.
Red Bull eek out their advantage at the top again with 624 points ahead of Ferrari and McLaren in second and third with 538 and 445 points, respectively. Williams are almost back into the negative in last place with 1 point, behind Kick Sauber and Alpine with 65 and 97 points, respectively.
points_files = [
'Driver_Points_Bar.png',
'Team_Points_Bar.png',
'Driver_Sum Points.png',
'Team_Sum Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [Path(f'{directory_path}/{race}_{file}') for file in points_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None]
Verstappen continues to be the most expensive selection of the entire field with a value of $30.5. Norris is now on $25.6 and Leclerc in third on $23.6. Perez's value is still dropping with $22.9 and Sainz rounds out the top five with a value of $21.6. Sargeant still represents your cheapest driver option with a value of $5.8. The two Kick drivers are next with values $7.4 and $7.5 for Zhou and Bottas. Nico Hulkenberg is next with a value of $7.8, and Pierre Gasly rounds out the cheapest five with a value of $8.1.
Red Bull is still your most expensive option, though it has remained constant this week, with a value of $28.8. McLaren are second with a value of $25.5 and Ferrari third with a value of $23.1. Williams are still your cheapest team with a value of $6.5, Kick next with a value of $6.8, and Alpine are your third cheapest with a value of $8.6.
All values given in millions of dollars.
average_files = [
'Driver_Values_Bar.png',
'Team_Values_Bar.png',
'Driver_Average Points.png',
'Team_Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
Path(f'{directory_path}/{race}_{file}') for file in average_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None]
Your best value for money this week was none other than Nico Hulkenberg, who comes in with a ppv of 2.44 ppm, leaps ahead of the Alpine pair Esteban Ocon and Pierre Gasly with 1.74 ppm and 1.72 ppm, respectively. Lewis Hamilton's value has taken a drop recently, meaning he was fourth with 1.65 ppm, and Kevin Magnussen returns to form with a 1.57 ppm. Logan Sargeant was your worst option this week with -3.28 ppm, followed by teammate Alex Albon with -1.45 ppm. Sergio Perez's poor form continues with -0.74 ppm, tied with Carlos Sainz. Charles Leclerc next up with -0.68 ppm, and Yuki Tsunoda brings home a 0 ppm.
Haas were your best value for money, constructor wise, this week with a 3.74 ppm. Alpine were pretty close in second with 3.6 ppm and Mercedes return to form with 3.43 ppm. Williams brought home a terrible -4.0 ppm, with Ferrari also negative with -0.69 ppm. Red Bull round out the bottom three with 0.87 ppm.
ppm = points per million dollars.
ppv_files = [
'Driver_Points Per Value_Bar.png',
'Team_Points Per Value_Bar.png',
'Driver_Average Points Per Value.png',
'Team_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [Path(f'{directory_path}/{race}_{file}') for file in ppv_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None]
subprocess.run(["python", "manager.py", f'{year}'])
CompletedProcess(args=['python', 'manager.py', '2024'], returncode=0)
Manager Scores¶
It's time to see what the scores are looking like in the fantasy league between all of you. It's a new weekly winner at the top with Sam CJ, joined by Andrew, at the top with Mirror, Signal, Manoeuvre and Forced To Pick Max coming in with 195 points. They pip rookie manager Adam by 1 point, with their team Just Win Init coming in in second place. Another 1 point back in third is Andrew again with I simp for Zak Brown. In fourth place we have Jake with A Sauber or Kick or Stake with 189 points, they're tied with Tim and Lights Out, Got Punched. Pete rounds out the top five with Lightning McCars and 188 points. Very close there in the top five, and none of the "big players" making an appearance.
Down in the dumps this week is Phil and BWM Motorrad coming home with -40 points, ahead of Pierce and Grazzi#44 with -36. They're joined by Stuart and E l'ora del martello with -17 points, just ahead of Toby and Hesketh 2.1 with -15 points. Rounding out the bottom five is our first Golf League team, manager James and Bwoah Rolex Sipsmith Golf are in fifth with 0 points.
Stefanus continues to hold on to the top three positions in the league with their teams Haryanto, Syahrul, and Gelael sitting on 210y7, 1978, and 1835 points respectively. They're ahead of Patrick and Johnny UniHaas with 1834, and a strong week from Sam CJ and Mirror, Signal, Manoeuvre sees them hit the tail end of the top five with 1787 points.
Patrick and Racing No Points continue their dominance of the Golf League with 274 points ahead of Will and The Big One with 309. Joe and Alpine Sandbags make it back onto the podium with 337 points, ahead of Stuart and Ferrari Strategists with 358. Andrew and sBinnala Yacht Club round out the bottom five with 360 points.
Out biggest winner this week is Tim and Lights Out, Got Punched, the rookie manager gained 9 places this week. Pete and their teams Squeshed Nintendo Racing and Lightning McCars gain 8 places each. Tom, Matty, and Jake with their teams Toasted Eggs, The Lizard Queen, and One Red Bull Car & Gasly all gain 7 places to round out the top three. Our biggest loser this week is Pierce and their team Grazzi#44 who drop 12 places. Phil is in the mix too with BMW Motorrad dropping 10 places. Joe and kicktwitchyoutubepremium also suffer a massive 8 place drop to round out the bottom three.
team_files = [
'LeagueTeams_Points_Bar.png',
'LeagueTeams_Sum Points_Bar.png',
'LeagueTeams_Sum Points.png',
'LeagueTeams_PositionsGained_Bar.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
Path(f'{directory_path}/{race}_{file}') for file in team_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None]
AWAITING TEAM VALUE FIX
team_files = [
'LeagueTeams_Values_Bar.png',
'LeagueTeams_Sum Values.png',
'LeagueTeams_Points Per Value_Bar.png',
'LeagueTeams_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
Path(f'{directory_path}/{race}_{file}') for file in team_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None]
Stefanus is currently leading the way for total points as a manager, not a surprise given the rookie sensation is currently in the top three spots of the championship standings. Close behind is Josh, the pair are on 5920 and 4674 points, respectively. They're followed by Sebastian who has 4653 points. Our lowest three-team manager is Pierce with 2532 points across all there teams.
Sam CJ takes the highest average points this week, with their only team, sitting on 195 points. Tim is next with an average score of 189 points. Jake rounds out the top three with an average of 164.67. Toby is our worst manager of the week with an average score of -15 points. Ahead of them is Pierce with 44.5 points and Patrick with 45 points exactly.
manager_files = [
'LeagueManagers_Sum Points_Bar.png',
'LeagueManagers_Sum Points.png',
'LeagueManagers_Average Points_Bar.png',
'LeagueManagers_Sum Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
Path(f'{directory_path}/{race}_{file}') for file in manager_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None]
Manager if tge week this week is Tim who comes in with a points per value of 1.83 ppm, ahead of Andrew with 1.75 ppm and Sam CJ with 1.69 ppm. Toby is of course our worst manager of the week with a point per value of -0.13 ppm. He's closely followed by Pierce with 0.41 ppm and Phil with 0.49 ppm.
manager_files = [
'LeagueManagers_Sum Values.png',
'LeagueManagers_Average Values_Bar.png',
'LeagueManagers_Points Per Value_Bar.png',
'LeagueManagers_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
Path(f'{directory_path}/{race}_{file}') for file in manager_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None]
Max Verstappen just edges out Yuki Tsunoda and Nico Hulkenberg as the most used driver this week, the reigning champion topping in at 29 of the 65 selections available. The other two are close behind with 28 selections each. The Williams pairing of Logan Sargeant and Alex Albon are next in your weekly choices, coming in at 24 a piece. Then we have Charles Leclerc and Valtteri Bottas taking 21 of the 65 selections, with Kick teammate Guanyu Zhou and Pierre Gasly rounding out the top five with 19 selections. Oliver Bearman is still out there in the wild somewhere, making 2 of the 65 selections. George Russell and Lance Stroll are next with only 7 of you selected them for your team. Carlos Sainz, Sergio Perez, and Lewis Hamilton can only manage 8. Oscar Piastri is a lonely fourth with only 10 selections, while Esteban Ocon rounds out the bottom five with just 12 of 65 teams running him in their lineup.
Ferrari are still the team of choice amongst many of you, with 30 teams running the Italian Constructor this week. Next is RB who make 19 of the selections, and Haas round out the top three with 17 selections. Alpine are still your least favourite with only 5 selections, closely followed by Aston Martin with 6. Mercedes round out the bottom three, though I suspect that might change soon, the former powerhouse only managing 9 selections.
Max's DRS Boost tally continues to rise this week, with 26 of you selecting him as your double scorer, surprising that 3 of you still don't have him boosted. He's followed by Leclerc with 15 and Norris with 10. No extra DRS tokens this week, but we did have 2 auto pilots, 1 wildcard, and 1 no negative. Can't be many of those tokens lying around anymore so we will probably now start to see the tactical ones being played.
count_files = [
'LeagueCounts_Driver_Bar.png',
'LeagueCounts_Constructor_Bar.png',
'LeagueCounts_DRS Boost_Bar.png',
'LeagueCounts_Extra DRS_Bar.png',
'LeagueCounts_Perks_Bar.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
Path(f'{directory_path}/{race}_{file}') for file in count_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None, None]
count_files = [
'LeagueSumCounts_Driver.png',
'LeagueSumCounts_Constructor.png',
'LeagueSumCounts_DRS Boost.png',
'LeagueSumCounts_Extra DRS.png',
'LeagueSumCounts_Perks.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
Path(f'{directory_path}/{race}_{file}') for file in count_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None, None, None]
For more figures, please see the Facebook group album.
subprocess.run(["python", "league_prizes.py", f'{year}'])
CompletedProcess(args=['python', 'league_prizes.py', '2024'], returncode=0)
Prizes¶
Canada marks the fourth race of the seven included in The Continental, the highest scores across 7 races across the continents of the calendar. This means we are now in the latter stages of this award and we can get a better idea about who is going to be taking that prize. It is still all to play for as we have Stefanus and Haryanto leading the way with 871 points ahead of Jake and One Red Bull Car & Gasly in second with 758. Next is Stefanus and Syahrul with 732, ahead of Matty and The Lizard Queen with 715. Sam CJ rounds out the top five with Mirror, Signal, Manoeuvre with 683 points. With three races left to go, it could go any way, who has saved up their tokens for this one? Well we have a triple header coming up soon, which includes the British Grand Prix (another race in this prize), so we won't have to wait much longer to find out if anyone can take it to Stefanus.
Spain next, which is "Madrid Will Be Better", the lowest score at the Spanish Grand Prix, another spot prize! That's right, every single weekend is a prize weekend, so get your teams in order if you're one for the lowest prizes.
directory_path = Path(f'{root}/Data/{year}/Figures/Prizes')
file_paths = [
Path(f'{directory_path}/{file}') for file in
os.listdir(directory_path) if f'{race}' in file]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None]
F1 Play¶
We have a new entry into the F1 play league this week, latecomer Tim has joined the party. I won't go back and correct previous weeks, but he has entered all of the races so there is a score to count. Our weekly winner this week is Josh with a huge 7/10 predictions correct. Stuart was close behind with 5/10, Matty in third with 3/10, and Tim brings in 2/10.
That takes the scores to:
Stuart - 24
Josh - 31
Matty - 15
Tim - 21
F1_play = {
"Stuart S": [3, 5, 2, 4, 0, 2, 0, 3, 5],
"Matty J": [2, 2, 0, 0, 3, 3, 0, 2, 3],
"Josh M": [2, 3, 2, 6, 3, 3, 3, 2, 7],
"Tim W": [0, 3, 3, 0, 2, 3, 4, 4, 2]}
io.save_json_dicts(
out_path=Path(f'{root}/Data/{year}/F1_Play.json'),
dictionary=F1_play)
subprocess.run(["python", "F1_play.py", f'{year}'])
points_files = [
'Points.png',
'Sum Points.png',
'Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/F1_Play')
file_paths = [Path(f'{directory_path}/{race}_F1Play_{file}') for file in points_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
[None, None, None]
Next Up¶
Next up, Spain. The Spanish Grand Prix marks the start of a triple-header including Austria and Great Britain. Back into the European season and heading towards the summer break. Spain was classically a testing circuit and many of the teams have banks and banks of data to use to their advantage. However, we haven't really had much testing there with the new cars, and the track has changed in recent years to remove the final chicane. It is usually quite heavy on tyre wear and has brought some interesting strategic races in recent memory. Not much longer before we get a new Spanish Grand Prix, so let's try to enjoy the one we have for now.